package net.angrynut.web.handler.view;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.WorkbookUtil;
import org.springframework.web.servlet.view.document.AbstractXlsView;

import lombok.extern.slf4j.Slf4j;

/**
 * <p>
 * 这里只处理 xls 格式的 Excel。可以通过特定的数据格式抽象变成通用组件。
 * 
 * <p>
 * Spring 提供的其他相关支持见包 org.springframework.web.servlet.view.*
 * 
 * <p>
 * 更多Xls文件操纵示例见<a href="http://poi.apache.org/spreadsheet/quick-guide.html">
 * Apache POI 官方文档</a>
 * 
 * @author Angrynut
 *
 */
@Slf4j
public class DemoXlsView extends AbstractXlsView {

	@Override
	protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		log.debug("------> 开始构建 xls 工作簿");

		// 你可以通过请求来处理请求参数

		CreationHelper createHelper = workbook.getCreationHelper();
		if (workbook.getNumberOfSheets() == 0) {
			String safeName = WorkbookUtil.createSafeSheetName(model.get("sheetName").toString());
			Sheet sheet = workbook.createSheet(safeName);

			// 创建一个行，把单元格放到行中。第一行的行号是 0
			Row row = sheet.createRow((short) 0);

			// 创建一个单元格，并为单元格设置值
			Cell cell = row.createCell(0);
			cell.setCellValue(1);

			// 也可以在同一行代码中做到
			row.createCell(1).setCellValue(1.2);
			row.createCell(2).setCellValue(createHelper.createRichTextString("This is a string"));
			row.createCell(3).setCellValue(true);
		}

		log.debug("------> 构建 xls 工作簿完成");
	}
}